[小ネタ]direnvでGitブランチごとに環境変数を切り替える
direnvで環境変数を設定している環境でGit Hook post-checkoutとトリガーに環境変数のロードをすることでブランチごとに環境変数の値の切り替えができます。
はじめに
ディレクトリごとに環境変数を設定、管理できるdirenv はそれだけでも非常に便利ですが、今回はチェックアウトしているGitブランチごとに環境変数の値を変更できないか試してみたのでその方法を紹介します。
必要なもの
- direnv
- Git
方針
方針は以下の通りです。
- direnvを使ってチェックアウトしているブランチ名に応じて環境変数の値を変更する
- git post-checkout hookでdirenv allowして環境変数を更新する
実際のスクリプトは以下のようになります。
.envrc
# ブランチ名にspecial_branch が含まれる場合はsecretの値を変更する if git branch --show-current | grep 'special_branch' > /dev/null; then export my='mop-cc-app-api-dev' else export pz_client_id='mop-api-itg-test' fi
.git/hooks/post-checkout
#!/usr/bin/env bash direnv allow .
使用例
以下の例ではmainからspecial_branchに切り替えることで変数 my_secret
の値が変わっていることがわかります。
## mainブランチの場合 $ git checkout main Already on 'main' direnv: loading ~/tmp/direnv_on_git/.envrc direnv: export +my_secret $ env | grep my_secret my_secret=usual_secret ## special_branchに切り替え $ git checkout -b special_branch Switched to a new branch 'special_branch' direnv: loading ~/tmp/direnv_on_git/.envrc direnv: export +my_secret $ env | grep my_secret my_secret=another_secret
まとめ
Git hookとdirenvを使ってブランチごとに環境変数の値を変更できました。